package com.vvv.shortlink.project.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vvv.shortlink.project.dao.entity.LinkDO;
import com.vvv.shortlink.project.dto.req.LinkCreateReqDTO;
import com.vvv.shortlink.project.dto.req.LinkPageReqDTO;
import com.vvv.shortlink.project.dto.req.LinkUpdateReqDTO;
import com.vvv.shortlink.project.dto.req.LinkBatchCreateReqDTO;
import com.vvv.shortlink.project.dto.resp.LinkCreateRespDTO;
import com.vvv.shortlink.project.dto.resp.LinkGroupCountRespDTO;
import com.vvv.shortlink.project.dto.resp.LinkPageRespDTO;
import com.vvv.shortlink.project.dto.resp.LinkBatchCreateRespDTO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.util.List;

/**
* @author Dell
* @description 针对表【t_link】的数据库操作Service
* @createDate 2024-02-02 10:21:57
*/
public interface LinkService extends IService<LinkDO> {

    /**
     * 创建短链接
     *
     * @param requestParam 创建短链接请求参数
     * @return gid 短链接url 原始url
     */
    LinkCreateRespDTO createShortLink(LinkCreateReqDTO requestParam);

    /**
     * 分页查询短链接
     *
     * @param requestParam gid
     * @return
     */
    IPage<LinkPageRespDTO> pageShortLink(LinkPageReqDTO requestParam);

    /**
     * 统计userId下面的个分组下面的短链接数量
     *
     * @param userId，用户id
     * @return gid,shortLinkCount
     */
    List<LinkGroupCountRespDTO> listShortLinkGroupCount(Long userId);

    /**
     * 更新短链接信息
     *
     * @param requestParam 入参
     */
    void updateShortLink(LinkUpdateReqDTO requestParam);

    /**
     * 根据短链接uri跳转原始链接
     * @param shortUri 短链接uri
     * @param request Http 请求
     * @param response Http 响应
     */
    void restoreUrl(String shortUri, HttpServletRequest request, HttpServletResponse response);

    /**
     * 批量创建短链接
     *
     * @param requestParam 批量创建短链接请求参数
     * @return 批量创建短链接返回参数
     */
    LinkBatchCreateRespDTO batchCreateShortLink(LinkBatchCreateReqDTO requestParam);
}
